{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Killing方程求解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "\\[ \\left[ \\begin{array}{r}0 = - 2 \\frac{\\partial}{\\partial t} \\operatorname{ξ^{1}}{\\left(t,x,y,z \\right)}\\\\0 = - \\frac{\\partial}{\\partial x} \\operatorname{ξ^{1}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial t} \\operatorname{ξ^{2}}{\\left(t,x,y,z \\right)}\\\\0 = 2 \\frac{\\partial}{\\partial x} \\operatorname{ξ^{2}}{\\left(t,x,y,z \\right)}\\\\0 = - \\frac{\\partial}{\\partial y} \\operatorname{ξ^{1}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial t} \\operatorname{ξ^{3}}{\\left(t,x,y,z \\right)}\\\\0 = \\frac{\\partial}{\\partial y} \\operatorname{ξ^{2}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial x} \\operatorname{ξ^{3}}{\\left(t,x,y,z \\right)}\\\\0 = 2 \\frac{\\partial}{\\partial y} \\operatorname{ξ^{3}}{\\left(t,x,y,z \\right)}\\\\0 = - \\frac{\\partial}{\\partial z} \\operatorname{ξ^{1}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial t} \\operatorname{ξ^{4}}{\\left(t,x,y,z \\right)}\\\\0 = \\frac{\\partial}{\\partial z} \\operatorname{ξ^{2}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial x} \\operatorname{ξ^{4}}{\\left(t,x,y,z \\right)}\\\\0 = \\frac{\\partial}{\\partial z} \\operatorname{ξ^{3}}{\\left(t,x,y,z \\right)} + \\frac{\\partial}{\\partial y} \\operatorname{ξ^{4}}{\\left(t,x,y,z \\right)}\\\\0 = \\frac{\\partial}{\\partial z} \\operatorname{ξ^{4}}{\\left(t,x,y,z \\right)}\\end{array} \\right] \\]"
      ],
      "text/plain": [
       "10-element Array{Sym,1}:\n",
       "                                Eq(0, -2*Derivative(ξ^1(t, x, y, z), t))\n",
       " Eq(0, -Derivative(ξ^1(t, x, y, z), x) + Derivative(ξ^2(t, x, y, z), t))\n",
       "                                 Eq(0, 2*Derivative(ξ^2(t, x, y, z), x))\n",
       " Eq(0, -Derivative(ξ^1(t, x, y, z), y) + Derivative(ξ^3(t, x, y, z), t))\n",
       "  Eq(0, Derivative(ξ^2(t, x, y, z), y) + Derivative(ξ^3(t, x, y, z), x))\n",
       "                                 Eq(0, 2*Derivative(ξ^3(t, x, y, z), y))\n",
       " Eq(0, -Derivative(ξ^1(t, x, y, z), z) + Derivative(ξ^4(t, x, y, z), t))\n",
       "  Eq(0, Derivative(ξ^2(t, x, y, z), z) + Derivative(ξ^4(t, x, y, z), x))\n",
       "  Eq(0, Derivative(ξ^3(t, x, y, z), z) + Derivative(ξ^4(t, x, y, z), y))\n",
       "                                   Eq(0, Derivative(ξ^4(t, x, y, z), z))"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "using SymPy\n",
    "using LinearAlgebra\n",
    "\n",
    "\n",
    "# 选择洛伦兹坐标系\n",
    "@vars t x y z real=true\n",
    "X = [t,x,y,z]\n",
    "\n",
    "# 闵氏度规及逆度规【扩展成5维（自然也兼容4维）】\n",
    "g = sympy.diag(-1,1,1,1,1)\n",
    "gi = inv(g)\n",
    "\n",
    "\n",
    "# 待求的Killing矢量场的分量\n",
    "ξ = SymFunction(\"ξ^1,ξ^2,ξ^3,ξ^4\")\n",
    "\n",
    "\n",
    "# 根据度规计算克氏符\n",
    "Γ = sum([(1//2)*gi[σ,ρ]*(diff(g[μ,ρ],X[υ])+\n",
    "            diff(g[υ,ρ],X[μ])-diff(g[μ,υ],X[ρ])) \n",
    "        for μ in 1:4,υ in 1:4 ,σ in 1:4] \n",
    "    for ρ in 1:4)\n",
    "\n",
    "# 列出所有独立Killing方程组\n",
    "eqs = [(0⩵diff(sum(g[υ,ρ]*ξ[ρ](t,x,y,z) for ρ in 1:4),X[μ])+\n",
    "        diff(sum(g[μ,ρ]*ξ[ρ](t,x,y,z) for ρ in 1:3),X[υ])-\n",
    "        2*sum(Γ[μ,υ,σ]*sum(g[σ,ρ]*ξ[ρ](t,x,y,z) for ρ in 1:4) \n",
    "            for σ in 1:4)) \n",
    "    for μ in 1:4,υ in 1:4  if μ ≤ υ ]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由方程1、3、6、10，可确定\n",
    "\n",
    "$$\n",
    "\\xi^1=f(x,y,z)\\quad \\xi^2=g(t,y,z)\\quad \\xi^3=h(t,x,z)\\quad \\xi^4=l(t,x,y)\n",
    "$$\n",
    "\n",
    "回代入方程2、4、5、7、8、9，并分量变量得\n",
    "\n",
    "$$\n",
    "\\frac{\\partial f(x,y,z)}{\\partial x}=\\frac{\\partial g(t,y,z)}{\\partial t}=C_1(y,z)\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\frac{\\partial f(x,y,z)}{\\partial y}=\\frac{\\partial h(t,x,z)}{\\partial t}=C_2(x,z)\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\frac{\\partial g(t,y,z)}{\\partial y}=-\\frac{\\partial h(t,x,z)}{\\partial x}=C_3(t,z)\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\frac{\\partial f(x,y,z)}{\\partial z}=\\frac{\\partial l(t,x,y)}{\\partial t}=C_4(x,y)\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\frac{\\partial g(t,y,z)}{\\partial z}=-\\frac{\\partial l(t,x,y)}{\\partial x}=C_5(t,y)\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\frac{\\partial h(t,x,z)}{\\partial z}=-\\frac{\\partial l(t,x,y)}{\\partial y}=C_6(t,x)\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=C_2(x,z)=C_3(t,z)=C_4(x,y)=C_5(t,y)=C_6(t,x)=0$时，有四个平移特解：\n",
    "\n",
    "$$\n",
    "(\\xi_1)^a=\\left(\\frac{\\partial}{\\partial t}\\right)^a,\\quad \\xi_1=(1,0,0,0)^T\n",
    "$$\n",
    "\n",
    "$$\n",
    "(\\xi_2)^a=\\left(\\frac{\\partial}{\\partial x}\\right)^a,\\quad \\xi_2=(0,1,0,0)^T\n",
    "$$\n",
    "\n",
    "$$\n",
    "(\\xi_3)^a=\\left(\\frac{\\partial}{\\partial y}\\right)^a,\\quad \\xi_3=(0,0,1,0)^T\n",
    "$$\n",
    "\n",
    "$$\n",
    "(\\xi_4)^a=\\left(\\frac{\\partial}{\\partial z}\\right)^a,\\quad \\xi_4=(0,0,0,1)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=C_2(x,z)=C_3(t,z)=C_4(x,y)=C_5(t,y)=0,C_6(t,x)\\color{red}{\\ne}0$时，有一个沿$t$轴平移特解（前面已有），一个沿$x$轴平移特解（前面已有），还有一个$y-z$平面上旋转特解（新特解）：\n",
    "\n",
    "$$\n",
    "(\\xi_5)^a=z\\left(\\frac{\\partial}{\\partial y}\\right)^a-y\\left(\\frac{\\partial}{\\partial z}\\right)^a,\\quad \\xi_5=(0,0,-z,y)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=C_2(x,z)=C_3(t,z)=C_4(x,y)=0,C_5(t,y)\\color{red}{\\ne }0,C_6(t,x)=0$时，有一个沿$t$轴平移特解（前面已有），一个沿$y$轴平移特解（前面已有），还有一个$z-x$平面上旋转特解（新特解）：\n",
    "\n",
    "$$\n",
    "(\\xi_6)^a=x\\left(\\frac{\\partial}{\\partial z}\\right)^a-z\\left(\\frac{\\partial}{\\partial x}\\right)^a,\\quad \\xi_6=(0,z,0,-x)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=C_2(x,z)=C_3(t,z)=0,C_4(x,y)\\color{red}{\\ne}0,C_5(t,y)=C_6(t,x)=0$时，有一个沿$x$轴平移特解（前面已有），一个沿$y$轴平移特解（前面已有），还有一个$t-z$洛伦兹Boost特解（新特解）：\n",
    "\n",
    "$$\n",
    "(\\xi_7)^a=z\\left(\\frac{\\partial}{\\partial t}\\right)^a+t\\left(\\frac{\\partial}{\\partial z}\\right)^a,\\quad \\xi_7=(z,0,0,t)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=C_2(x,z)=0,C_3(t,z)\\color{red}{\\ne}0,C_4(x,y)=C_5(t,y)=C_6(t,x)=0$时，有一个沿$t$轴平移特解（前面已有），一个沿$z$轴平移特解（前面已有），还有一个$x-y$平面上旋转特解（新特解）：\n",
    "\n",
    "$$\n",
    "(\\xi_8)^a=y\\left(\\frac{\\partial}{\\partial x}\\right)^a-x\\left(\\frac{\\partial}{\\partial y}\\right)^a,\\quad \\xi_8=(0,-y,x,0)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)=0,C_2(x,z)\\color{red}{\\ne}0,C_3(t,z)=C_4(x,y)=C_5(t,y)=C_6(t,x)=0$时，有一个沿$x$轴平移特解（前面已有），一个沿$z$轴平移特解（前面已有），还有一个$t-y$洛伦兹Boost特解（新特解）：\n",
    "$$\n",
    "(\\xi_9)^a=y\\left(\\frac{\\partial}{\\partial t}\\right)^a+t\\left(\\frac{\\partial}{\\partial y}\\right)^a,\\quad \\xi_9=(y,0,t,0)^T\n",
    "$$\n",
    "\n",
    "当$C_1(y,z)\\color{red}{\\ne}0,C_2(x,z)=C_3(t,z)=C_4(x,y)=C_5(t,y)=C_6(t,x)=0$时，有一个沿$y$轴平移特解（前面已有），一个沿$z$轴平移特解（前面已有），还有一个$t-x$洛伦兹Boost特解（新特解）：\n",
    "\n",
    "$$\n",
    "(\\xi_{10})^a=x\\left(\\frac{\\partial}{\\partial t}\\right)^a+t\\left(\\frac{\\partial}{\\partial x}\\right)^a,\\quad \\xi_{10}=(x,t,0,0)^T\n",
    "$$\n",
    "\n",
    "至此，已经获得10个独立特解，而我们知道4维闵氏时空的Killing矢量场空间的最高维度是$n(n+1)/2=10$。 特解已经找全了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Killing矢量场生成元常数\n",
    "\n",
    "为了方便计算，根据求出的10个特解的分量，分类表示为：\n",
    "\n",
    "1）4个平移特解\n",
    "\n",
    "$$\n",
    "\\xi_{t_0}^{\\ \\ \\mu}=(1,0,0,0)\\quad \\xi_{t_1}^{\\ \\ \\mu}=(0,1,0,0) \\quad \\xi_{t_2}^{\\ \\ \\mu}=(0,0,1,0) \\quad \\xi_{t_3}^{\\ \\ \\mu}=(0,0,0,1)\n",
    "$$\n",
    "\n",
    "2）3个转动特解\n",
    "\n",
    "$$\n",
    "\\xi_{r_1}^{\\ \\ \\mu}=(0,0,z,-y) \\quad \\xi_{r_2}^{\\ \\ \\mu}=(0,-z,0,x) \\quad \\xi_{r_3}^{\\ \\ \\mu}=(0,y,-x,0)\n",
    "$$\n",
    "\n",
    "3）3个伪转动特解\n",
    "\n",
    "$$\n",
    "\\xi_{b_1}^{\\ \\ \\mu}=(x,t,0,0) \\quad \\xi_{b_2}^{\\ \\ \\mu}=(y,0,t,0) \\quad \\xi_{b_3}^{\\ \\ \\mu}=(z,0,0,t)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  4个平移\n",
    "ξ_t=sympy.diag(1,1,1,1);              \n",
    "#  3个转动\n",
    "ξ_r=[0 0 z -y; 0 -z 0 x; 0 y -x 0]; \n",
    "#  3个伪转动\n",
    "ξ_b=[x t 0 0; y 0 t 0; z 0 0 t];    \n",
    "\n",
    "#  Levi-Civita记号\n",
    "ε= [ (i≠j && i≠k && j≠k )*       #  存在重复指标，取0\n",
    "    (-1)^(sum([i,j,k][σ]>[i,j,k][ρ]   \n",
    "            for σ in 1:3,ρ in  1:3  if σ<ρ) % 2) # 计算逆序数。偶数取1，奇数取-1\n",
    "    for  i in 1:3, j in 1:3, k in 1:3 ] ;\n",
    "\n",
    "δ=sympy.diag(1,1,1,1,1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "平移之间的李括号【后面类似，不再列出】\n",
    "\n",
    "$$\n",
    "[\\xi_{t_i},\\xi_{t_i}]^a=\\left(\\frac{\\partial}{\\partial x^\\mu}\\right)^a\\left[\\xi_{t_i}^{\\ \\ \\upsilon}\\partial_\\upsilon \\xi_{t_j}^{\\ \\ \\mu}-\\xi_{t_j}^{\\ \\ \\upsilon}\\partial_\\upsilon \\xi_{t_i}^{\\ \\ \\mu}\\right]\n",
    "$$\n",
    "\n",
    "验证：\n",
    "\n",
    "$$\n",
    "[\\color{red}{\\xi_{t_i}},\\color{red}{\\xi_{t_j}}]^a=0 \n",
    "$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_t[i,υ]*diff(ξ_t[j,μ],X[υ])-ξ_t[j,υ]*diff(ξ_t[i,μ],X[υ]) \n",
    "        for υ in 1:4)       # 等式左边\n",
    "    for i in 1:4 , j in 1:4, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{blue}{\\xi_{r_i}},\\color{blue}{\\xi_{r_j}}]^a=\\varepsilon^k_{\\ \\ ij}\\left(\\color{blue}{\\xi_{r_k}}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_r[i,υ]*diff(ξ_r[j,μ],X[υ])-ξ_r[j,υ]*diff(ξ_r[i,μ],X[υ]) \n",
    "        for υ in 1:4)-                     # 等式左边\n",
    "    sum(ε[k,i,j]*ξ_r[k,μ] for k in 1:3)  # 等式右边\n",
    "    for i in 1:3 , j in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{green}{\\xi_{b_i}},\\color{green}{\\xi_{b_j}}]^a=-\\varepsilon^k_{\\ \\ ij}\\left(\\color{blue}{\\xi_{r_k}}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_b[i,υ]*diff(ξ_b[j,μ],X[υ])-ξ_b[j,υ]*diff(ξ_b[i,μ],X[υ]) \n",
    "        for υ in 1:4)+                     # 等式左边\n",
    "    sum(ε[k,i,j]*ξ_r[k,μ] for k in 1:3)  # 等式右边\n",
    "    for i in 1:3 , j in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\xi_{t_0},\\color{blue}{\\xi_{r_i}}]^a=0\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_t[1,υ]*diff(ξ_r[i,μ],X[υ])-ξ_r[i,υ]*diff(ξ_t[1,μ],X[υ]) \n",
    "        for υ in 1:4)                     # 等式左边\n",
    "    for i in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{red}{\\xi_{t_i}},\\color{blue}{\\xi_{r_j}}]^a=\\varepsilon^k_{\\ \\ ij}\\left(\\color{red}{\\xi_{t_k}}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_t[i+1,υ]*diff(ξ_r[j,μ],X[υ])-ξ_r[j,υ]*diff(ξ_t[i+1,μ],X[υ]) \n",
    "        for υ in 1:4)-                      # 等式左边\n",
    "    sum(ε[k,i,j]*ξ_t[k+1,μ] for k in 1:3) # 等式右边\n",
    "    for i in 1:3 , j in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\xi_{t_0},\\color{green}{\\xi_{b_i}}]^a=\\left(\\color{red}{\\xi_{t_i}}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_t[1,υ]*diff(ξ_b[i,μ],X[υ])-ξ_b[i,υ]*diff(ξ_t[1,μ],X[υ]) \n",
    "        for υ in 1:4) -                    # 等式左边\n",
    "    ξ_t[i+1,μ]                               # 等式右边\n",
    "    for i in 1:3, μ in 1:4]  |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{red}{\\xi_{t_i}},\\color{green}{\\xi_{b_j}}]^a=\\delta_{ij}\\left(\\xi_{t_0}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_t[i+1,υ]*diff(ξ_b[j,μ],X[υ])-ξ_b[j,υ]*diff(ξ_t[i+1,μ],X[υ]) \n",
    "        for υ in 1:4)-                      # 等式左边\n",
    "    δ[i,j]*ξ_t[1,μ]                        # 等式右边\n",
    "    for i in 1:3 , j in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{blue}{\\xi_{r_i}},\\color{green}{\\xi_{b_j}}]^a=\\varepsilon^k_{\\ \\ ij}\\left(\\color{green}{\\xi_{b_k}}\\right)^a\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(ξ_r[i,υ]*diff(ξ_b[j,μ],X[υ])-ξ_b[j,υ]*diff(ξ_r[i,μ],X[υ]) \n",
    "        for υ in 1:4)-                     # 等式左边\n",
    "    sum(ε[k,i,j]*ξ_b[k,μ] for k in 1:3)  # 等式右边\n",
    "    for i in 1:3 , j in 1:3, μ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Killing矢量场生成元结构常数的浓缩\n",
    "\n",
    "引入的记号$\\color{red}{l_{\\mu\\upsilon}}=l_{[\\mu\\upsilon]}\\quad \\mu,\\upsilon=0,1,2,3$ \n",
    "\n",
    "$$\n",
    "l_{01}=b_1\\quad l_{02}=b_2\\quad l_{03}=b_3\n",
    "$$\n",
    "\n",
    "$$\n",
    "l_{12}=r_3\\quad l_{23}=r_1\\quad l_{31}=r_2\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\color{red}{l_{\\mu\\upsilon}}=\\begin{pmatrix}0 & b_1 & b_2 & b_3 \\\\ -b_1 & 0 & r_3 & -r_2 \\\\ -b_2 & -r_3 & 0 & r_1 \\\\ -b_3 & r_2 & -r_1 & 0 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "将$\\xi_r$和$\\xi_b$的信息合并写入$\\xi$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×4 Array{Array{Sym,1},2}:\n",
       " [0, 0, 0, 0]    [x, t, 0, 0]   [y, 0, t, 0]   [z, 0, 0, t]\n",
       " [-x, -t, 0, 0]  [0, 0, 0, 0]   [0, y, -x, 0]  [0, z, 0, -x]\n",
       " [-y, 0, -t, 0]  [0, -y, x, 0]  [0, 0, 0, 0]   [0, 0, z, -y]\n",
       " [-z, 0, 0, -t]  [0, -z, 0, x]  [0, 0, -z, y]  [0, 0, 0, 0]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ξ=[Sym(0) for μ in 1:4 , υ in 1:4 , σ in 1:4];\n",
    "ξ[1,2:end,:]=ξ_b;\n",
    "ξ[2:end,1,:]=-ξ_b;\n",
    "ξ[2:end,2:end,:]=[sum(ε[k,i,j]*ξ_r[k,μ] for k in 1:3) for  i in 1:3, j in 1:3 , μ in 1:4]\n",
    "[[ξ[μ,υ,σ] for σ in 1:4] for μ in 1:4, υ in 1:4]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "验证：\n",
    "\n",
    "$$\n",
    "[\\xi_{l_{\\mu\\upsilon}},\\xi_{l_{\\sigma\\rho}}]^a=-\\eta_{\\mu\\rho}(\\xi_{l_{\\upsilon\\sigma}})^a-\\eta_{\\upsilon\\sigma}(\\xi_{l_{\\mu\\rho}})^a+\\eta_{\\mu\\sigma}(\\xi_{l_{\\upsilon\\rho}})^a+\\eta_{\\upsilon\\rho}(\\xi_{l_{\\mu\\sigma}})^a \n",
    "$$\n",
    "\n",
    "$$\n",
    "[\\xi_{l_{\\mu\\upsilon}},\\xi_{t_\\sigma}]^a=\\eta_{\\mu\\sigma}(\\xi_{t_\\mu})^a-\\eta_{\\upsilon\\sigma}(\\xi_{t_\\mu})^a\n",
    "$$\n",
    "\n",
    "改写成分量形式\n",
    "\n",
    "$$\n",
    "\\xi_{l_{\\mu\\upsilon}}^{\\ \\ \\beta}\\partial_\\beta\\xi_{l_{\\sigma\\rho}}^{\\ \\ \\alpha}-\\xi_{l_{\\sigma\\rho}}^{\\ \\ \\beta}\\partial_\\beta\\xi_{l_{\\mu\\upsilon}}^{\\ \\ \\alpha}=-\\eta_{\\mu\\rho}\\xi_{l_{\\upsilon\\sigma}}^{\\ \\ \\alpha}-\\eta_{\\upsilon\\sigma}\\xi_{l_{\\mu\\rho}}^{\\ \\ \\alpha}+\\eta_{\\mu\\sigma}\\xi_{l_{\\upsilon\\rho}}^{\\ \\ \\alpha}+\\eta_{\\upsilon\\rho}\\xi_{l_{\\mu\\sigma}}^{\\ \\ \\alpha} \n",
    "$$\n",
    "\n",
    "$$\n",
    "\\xi_{l_{\\mu\\upsilon}}^{\\ \\ \\beta}\\partial_\\beta\\xi_{t_{\\sigma}}^{\\ \\ \\alpha}-\\xi_{t_{\\sigma}}^{\\ \\ \\beta}\\partial_\\beta\\xi_{l_{\\mu\\upsilon}}^{\\ \\ \\alpha}=\\eta_{\\mu\\sigma}\\xi_{t_\\upsilon}^{\\ \\ \\alpha}-\\eta_{\\upsilon\\sigma}\\xi_{t_\\mu}^{\\ \\ \\alpha}\n",
    "$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 如果算出的结果是全零的，即验证通过\n",
    "[sum(ξ[μ,υ,β]*diff(ξ[σ,ρ,α],X[β])-ξ[σ,ρ,β]*diff(ξ[μ,υ,α],X[β]) \n",
    "        for β in 1:4)+      # 等式左边\n",
    "    g[μ,ρ]*ξ[υ,σ,α]+g[υ,σ]*ξ[μ,ρ,α]-\n",
    "        g[μ,σ]*ξ[υ,ρ,α]-g[υ,ρ]*ξ[μ,σ,α]  # 等式右边\n",
    "    for μ in 1:4, υ in 1:4, σ in 1:4, ρ in 1:4, α in 1:4]  |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 如果算出的结果是全零的，即验证通过\n",
    "[sum(ξ[μ,υ,β]*diff(ξ_t[σ,α],X[β])-ξ_t[σ,β]*diff(ξ[μ,υ,α],X[β]) for β in 1:4)-\n",
    "    g[μ,σ]*ξ_t[υ,α]+g[υ,σ]*ξ_t[μ,α]\n",
    "    for μ in 1:4, υ in 1:4, σ in 1:4, α in 1:4]  |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成元的矩阵形式\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0\\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & -1 & 0 \\end{pmatrix}\\begin{pmatrix}0 & 0 & 0 & 0 \\\\ 0 &  0 & 0 & -1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 &  1 & 0 & 0 \\end{pmatrix}\\begin{pmatrix}0 & 0 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & -1 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \\\\  0 & 0 & 0 & 0 \\end{pmatrix}\\begin{pmatrix}0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\\\ 1 & 0&  0 & 0 \\\\  0 & 0 & 0 & 0 \\end{pmatrix}\\begin{pmatrix}0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\  0 & 0 & 0 & 0 \\\\ 1 & 0& 0 & 0 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "$$\n",
    "t_0=\\begin{pmatrix}0 & 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 & 0 \\\\  0 & 0 & 0 & 0 & 0 \\\\ 0 & 0& 0 & 0 & 0  \\\\ 0 & 0& 0 & 0 & 0  \\end{pmatrix}\\quad t_1=\\begin{pmatrix}0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 1 \\\\  0 & 0 & 0 & 0 & 0 \\\\ 0 & 0& 0 & 0 & 0  \\\\ 0 & 0& 0 & 0 & 0  \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "$$\n",
    "t_2=\\begin{pmatrix}0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 0 \\\\  0 & 0 & 0 & 0 & 1 \\\\ 0 & 0& 0 & 0 & 0  \\\\ 0 & 0& 0 & 0 & 0  \\end{pmatrix}\\quad t_3=\\begin{pmatrix}0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 0 \\\\  0 & 0 & 0 & 0 & 0 \\\\ 0 & 0& 0 & 0 & 1  \\\\ 0 & 0& 0 & 0 & 0  \\end{pmatrix}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  平移没有同维的生成元矩阵形式，但有高一维的生成元矩阵\n",
    "tmp=[1 0 0 0 t; 0 1 0 0 x; 0 0 1 0 y; 0 0 0 1 z; 0 0 0 0 1]\n",
    "T_0 = tmp .|>  (expr->(diff(expr,t)));\n",
    "T_1 = tmp .|>  (expr->(diff(expr,x)));\n",
    "T_2 = tmp .|>  (expr->(diff(expr,y)));\n",
    "T_3 = tmp .|>  (expr->(diff(expr,z)));\n",
    "T=[T_0,T_1,T_2,T_3];\n",
    "\n",
    "# 由于平移只存在高一维的生成元矩阵，不得不将转动矩阵扩张成5维\n",
    "# 扩展的部分补0\n",
    "R_1=[0 0 0 0 0; 0 0 0 0 0; 0 0 0 -1 0; 0 0 1 0 0; 0 0 0 0 0];\n",
    "R_2=[0 0 0 0 0; 0 0 0 1 0; 0 0 0 0 0; 0 -1 0 0 0; 0 0 0 0 0];\n",
    "R_3=[0 0 0 0 0; 0 0 -1 0 0; 0 1 0 0 0; 0 0 0 0 0; 0 0 0 0 0];\n",
    "B_1=[0 -1 0 0 0; -1 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0];\n",
    "B_2=[0 0 -1 0 0; 0 0 0 0 0; -1 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0];\n",
    "B_3=[0 0 0 -1 0; 0 0 0 0 0; 0 0 0 0 0; -1 0 0 0 0; 0 0 0 0 0];\n",
    "R=[R_1,R_2,R_3];\n",
    "B=[B_1,B_2,B_3];\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{red}{t_i},\\color{red}{t_j}]=0\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(T[i][μ,υ]*T[j][υ,σ]-T[j][μ,υ]*T[i][υ,σ] for υ in 1:4)  # 等式左边\n",
    "    for i in 1:4, j in 1:4, μ in 1:4, σ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{blue}{r_i},\\color{blue}{r_j}]=\\varepsilon^k_{\\ \\ ij}\\color{blue}{r_k}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(R[i][μ,υ]*R[j][υ,σ]-R[j][μ,υ]*R[i][υ,σ] for υ in 1:4) -   # 等式左边\n",
    "        sum(ε[k,i,j]*R[k][μ,σ] for k in 1:3)                         # 等式右边\n",
    "    for i in 1:3, j in 1:3, μ in 1:4, σ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{green}{b_i},\\color{green}{b_j}]=-\\varepsilon^k_{\\ \\ ij}\\color{blue}{r_k}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(B[i][μ,υ]*B[j][υ,σ]-B[j][μ,υ]*B[i][υ,σ] for υ in 1:4) +   # 等式左边\n",
    "        sum(ε[k,i,j]*R[k][μ,σ] for k in 1:3)                         # 等式有边\n",
    "    for i in 1:3, j in 1:3, μ in 1:4, σ in 1:4] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[t_0,\\color{blue}{r_i}]=0\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(T[1][μ,υ]*R[j][υ,σ]-R[j][μ,υ]*T[1][υ,σ] for υ in 1:5)  # 等式左边\n",
    "    for j in 1:3, μ in 1:5, σ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{red}{t_i},\\color{blue}{r_j}]=\\varepsilon^k_{\\ \\ ij}\\color{red}{t_k}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(T[i+1][μ,υ]*R[j][υ,σ]-R[j][μ,υ]*T[i+1][υ,σ] for υ in 1:5) -    # 等式左边\n",
    "        sum(ε[k,i,j]*T[k+1][μ,σ] for k in 1:3)                         # 等式右边\n",
    "    for i in 1:3, j in 1:3, μ in 1:5, σ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[t_0,\\color{green}{b_i}]=\\color{red}{t_i}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(T[1][μ,υ]*B[j][υ,σ]-B[j][μ,υ]*T[1][υ,σ] for υ in 1:5) -  # 等式左边\n",
    "    T[j+1][μ,σ]\n",
    "    for j in 1:3, μ in 1:5, σ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{red}{t_i},\\color{green}{b_j}]=\\delta_{ij}t_0\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(T[i+1][μ,υ]*B[j][υ,σ]-B[j][μ,υ]*T[i+1][υ,σ] for υ in 1:5) -    # 等式左边\n",
    "        δ[i,j]*T[1][μ,σ]                         # 等式右边\n",
    "    for i in 1:3, j in 1:3, μ in 1:5, σ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[\\color{blue}{r_i},\\color{green}{b_j}]=\\varepsilon^k_{\\ \\ ij}\\color{green}{b_k}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(R[i][μ,υ]*B[j][υ,σ]-B[j][μ,υ]*R[i][υ,σ] for υ in 1:5) -   # 等式左边\n",
    "        sum(ε[k,i,j]*B[k][μ,σ] for k in 1:3)                         # 等式有边\n",
    "    for i in 1:3, j in 1:3, μ in 1:5, σ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成元的浓缩形式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×4 Array{Array{Sym,2},2}:\n",
       " [0 0 … 0 0; 0 0 … 0 0; … ; 0 0 … 0 0; 0 0 … 0 0]  …  [0 0 … -1 0; 0 0 … 0 0; … ; -1 0 … 0 0; 0 0 … 0 0]\n",
       " [0 1 … 0 0; 1 0 … 0 0; … ; 0 0 … 0 0; 0 0 … 0 0]     [0 0 … 0 0; 0 0 … -1 0; … ; 0 1 … 0 0; 0 0 … 0 0]\n",
       " [0 0 … 0 0; 0 0 … 0 0; … ; 0 0 … 0 0; 0 0 … 0 0]     [0 0 … 0 0; 0 0 … 0 0; … ; 0 0 … 0 0; 0 0 … 0 0]\n",
       " [0 0 … 1 0; 0 0 … 0 0; … ; 1 0 … 0 0; 0 0 … 0 0]     [0 0 … 0 0; 0 0 … 0 0; … ; 0 0 … 0 0; 0 0 … 0 0]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L=[Sym(0) for μ in 1:4 , υ in 1:4 , σ in 1:5, ρ in 1:5];\n",
    "L[1,2:end,:,:]=[ B[i][σ,ρ] for i in 1:3, σ in 1:5, ρ in 1:5 ];\n",
    "L[2:end,1,:,:]=-[ B[i][σ,ρ] for i in 1:3, σ in 1:5, ρ in 1:5 ];\n",
    "L[2:end,2:end,:,:]=[sum(ε[k,i,j]*R[k][σ,ρ] for k in 1:3) for  i in 1:3, j in 1:3 , σ in 1:5, ρ in 1:5];\n",
    "[[L[μ,υ,σ,ρ] for σ in 1:5, ρ in 1:5] for μ in 1:4, υ in 1:4]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "\\left(l_{\\mu\\upsilon}\\right)^\\alpha_{\\ \\ \\beta}=-\\delta^\\alpha_{\\ \\ \\mu}\\eta_{\\beta\\upsilon}+\\delta^\\alpha_{\\ \\ \\upsilon}\\eta_{\\beta\\mu}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[L[μ,υ,α,β]+δ[α,μ]*g[β,υ]-δ[α,υ]*g[β,μ] \n",
    "    for μ in 1:4, υ in 1:4, α in 1:5 , β in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "[l_{\\mu\\upsilon},l_{\\sigma\\rho}]=-\\eta_{\\mu\\rho}l_{\\upsilon\\sigma}-\\eta_{\\upsilon\\sigma}l_{\\mu\\rho}+\\eta_{\\mu\\sigma}l_{\\upsilon\\rho}+\\eta_{\\upsilon\\rho}l_{\\mu\\sigma} \\\\ [l_{\\mu\\upsilon},t_\\sigma]=\\eta_{\\mu\\sigma}t_\\upsilon-\\eta_{\\upsilon\\sigma}t_\\mu\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(L[μ,υ,α,β]*L[σ,ρ,β,γ]-L[σ,ρ,α,β]*L[μ,υ,β,γ] for β in 1:5)+\n",
    "    g[μ,ρ]*L[υ,σ,α,γ]+g[υ,σ]*L[μ,ρ,α,γ]-g[μ,σ]*L[υ,ρ,α,γ]-g[υ,ρ]*L[μ,σ,α,γ]\n",
    "    for μ in 1:4, υ in 1:4, σ in 1:4, ρ in 1:4, α in 1:5 , γ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[sum(L[μ,υ,α,β]*T[σ][β,γ]-T[σ][α,β]*L[μ,υ,β,γ] for β in 1:5)-\n",
    "    g[μ,σ]*T[υ][α,γ]+g[υ,σ]*T[μ][α,γ]\n",
    "    for μ in 1:4, υ in 1:4, σ in 1:4, α in 1:5 , γ in 1:5] |> \n",
    "(expr->all(e->(e==0),expr))  # 全零判断"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.4.1",
   "language": "julia",
   "name": "julia-1.4"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.4.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
